{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 疫情数据分析和预测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "疫情数据分析和预测是医学和流行病学应对大范围流行病时的重要判断手段，在医治隔离、预防响应、物资生产调配等抗疫措施上起到参考作用。\n",
    "\n",
    "以下将通过已知模型尝试寻找合适拟合模型并对目前全球疫情发展作出一定程度的预测。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一、逻辑斯蒂模型（Logistic）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "（1）模型描述：当一个物种迁入到一个新生态系统中后，其数量会发生变化。假设该物种的起始数量小于环境的最大容纳量，则数量会增长。该物种在此生态系统中有天敌、食物、空间等资源也不足（非理想环境），则增长函数满足逻辑斯谛方程，图像呈S形，此方程是描述在资源有限的条件下种群增长规律的一个最佳数学模型。\n",
    "\n",
    "（2）一般疾病的传播是S型增长的过程，因为疾病传播的过程中会受到一定的阻力（医治、切断传播途径等措施）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "此处采用最小二乘法，对logistic增长函数进行拟合。以下将检验最小二乘法拟合的逻辑斯蒂模型是否能贴合实际。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\王滨2000\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\scipy\\optimize\\minpack.py:807: OptimizeWarning: Covariance of the parameters could not be estimated\n",
      "  warnings.warn('Covariance of the parameters could not be estimated',\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K:capacity  P0:initial_value   r:increase_rate   t:time\n",
      "[4.63653383e+04 3.69197450e+00 1.00000000e+00]\n",
      "6644.614414551313\n",
      "9636.025649015395\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEGCAYAAABPdROvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXwU9f3H8deHcMqlclgEBFSUM4T7UAREjgoCRajSimC9ar1af6LYVsX+tJ71wLtqAak/BbUqbW0rWlCxKATBC6xHOUQo9xGOAAmf3x87WZdkN5mQbMIm7+fjsY/d+e4cn5mBfHZmvvMZc3dEREQOV5XyDkBERFKbEomIiJSIEomIiJSIEomIiJSIEomIiJRI1fIOoKw1bNjQW7ZsWd5hiIiklCVLlmx290bxvqt0iaRly5ZkZmaWdxgiIinFzFYn+k6ntkREpESUSEREpESUSEREpEQq3TWSeA4cOMDatWvJzs4u71BEpIRq1qxJs2bNqFatWnmHUmkokQBr166lbt26tGzZEjMr73BE5DC5O1u2bGHt2rW0atWqvMOpNJRIgOzsbCURkQrAzGjQoAGbNm0q71COHPe2ht0bC7bXbgyTviyVRegaSUBJRKRi0P/lfOIlkcLaD4MSiYiIlIgSSQUzadIk2rdvz6RJk3jiiSd49tlnS30Z06dP56qrrirQPmfOHO66665ixVhcv/3tb4s9TaJ4y0L//v2PiBtgy3MbSMWnayTF1O32uWzetb9Ae8M61cn89aByiOhQTz75JJs2baJGjRplvuwRI0YwYsSIIscrSYy//e1v+eUvf3k44UkJ5ObmkpaWVt5hyBFKRyTFFC+JFNYe1rPPPkt6ejqdOnVi/PjxAKxevZqBAweSnp7OwIEDWbNmDQATJ07kmmuuoU+fPpx44om89NJLQOQP+e7du+nZsyezZs1iypQp3HfffUDkl/EvfvELzjjjDNq2bcvixYsZPXo0rVu35te//nU0jj/+8Y/06NGDjIwMLr/8cnJzcwGYNm0ap5xyCv369eO9996Luw6xv3rDxrhp0ybOPfdcunfvTvfu3aPz3rVrFxdddBEdO3YkPT2dl19+mcmTJ7N3714yMjL48Y9/XOJ4p0yZwvjx4znzzDNp3bo1Tz31VPS7e++9l+7du5Oens6tt94abb///vvp0KEDHTp04MEHHwRg1apVtGnThgkTJpCens6YMWPYs2dPgeW98cYb9O7dmy5dujB27Fh27dpVYJz+/ftz44030qNHD0455RTefffdAtsWYPjw4cyfPx+AOnXqcOONN9K1a1fOOussFi1aRP/+/TnxxBOZM2dOdJpvvvmGoUOHcuqpp3LbbbdF2xNtwzp16nDLLbfQs2dPFi5cGHcbigCR7nKV6dW1a1fPb/ny5QXaEmlx418Svg7Xp59+6qeccopv2rTJ3d23bNni7u7Dhw/36dOnu7v7M8884yNHjnR39wkTJviYMWM8NzfXP/vsMz/ppJOi86pdu3b086233ur33nuvu7v369fPb7jhBnd3f/DBB71Jkya+bt06z87O9qZNm/rmzZt9+fLlPnz4cN+/f7+7u19xxRU+Y8YMX7dunTdv3tw3btzo+/bt8z59+viVV15ZYD2mTZsWbQ8b47hx4/zdd991d/fVq1d7mzZt3N39hhtu8GuvvTY63tatWwtMW9J4b731Vk9PT/c9e/b4pk2bvFmzZv7tt9/6P/7xD7/00kv94MGDnpub68OGDfO3337bMzMzvUOHDr5r1y7Pysrydu3a+YcffugrV650wBcsWODu7hdddNEh233x4sW+adMm79u3r+/atcvd3e+66y6/7bbbCsTUr18/v+6669zd/a9//asPHDiwwLZ1dx82bJjPmzfP3d0Bf/31193dfdSoUT5o0CDfv3+/L1u2zDt16hSd/nvf+55v3rzZ9+zZ4+3bt/fFixcn3IZ58501a1aBGFNBcf5PV3j3nOx+a72Cr3tOLtZsgExP8HdVp7aOAP/85z8ZM2YMDRs2BODYY48FYOHChfzpT38CYPz48dxwww3RaUaNGkWVKlVo164dGzZsCLWcvNNOHTt2pH379jRp0gSAE088kW+++YYFCxawZMkSunfvDsDevXtp3LgxH3zwAf3796dRo0jhz/POO48vvviiyOWFifHNN99k+fLl0eGdO3eSlZXFm2++yQsvvBBtP+aYYwpM+9Zbb5U43pEjR1KrVi1q1arFgAEDWLRoEQsWLOCNN96gc+fOQOTo6Msvv2TXrl384Ac/oHbt2gCMHj2ad999lxEjRtC8eXNOO+00AC644AKmTp3K9ddfH13O+++/z/Lly6Pj7N+/n969e8eNafTo0QB07dqVVatWxR0nVvXq1Rk6dCgQ2bc1atSgWrVqdOzY8ZDpBw0aRIMGDaLLWLBgAVWrVo27DQHS0tI499xzi1y+HOFKqYtvYZRIjgDuHqrLYuw4sdcXIj8WipY3TZUqVQ6ZvkqVKuTk5ODuTJgwgTvvvPOQ6V599dXD6lIZJsaDBw+ycOFCatWqdUh7mG1SGvHmH8/McHduuukmLr/88kO+yzuVFXY++WMdNGgQzz//fJEx5W23tLQ0cnJyAKhatSoHDx6MjhNbhaFatWrR5cXu27z9WliMibYhRO4Q13URCUPXSI4AAwcOZPbs2WzZsgWArVu3AtCnT5/or/LnnnuO008/PelxvPTSS2zcuDEax+rVq+nZsyfz589ny5YtHDhwgBdffLHUljl48GAeeeSR6PCyZcvitm/btg2I/NE8cOBAqcX72muvkZ2dzZYtW5g/fz7du3dnyJAh/OEPf4hew/j222/ZuHEjZ5xxBq+++ip79uxh9+7dvPLKK/Tt2xeANWvWRK8jPP/88wX2Va9evXjvvff46quvANizZ0+oo7o8LVu2ZNmyZRw8eJBvvvmGRYsWhZ42z9y5c9m6dSt79+7l1Vdf5bTTTku4DUWKQ4mkmBrWqV6s9jDat2/Pr371K/r160enTp247rrrAJg6dSrTpk0jPT2dmTNn8tBDDx32MsJo164dt99+O4MHDyY9PZ1Bgwaxfv16mjRpwpQpU+jduzdnnXUWXbp0KbVlTp06lczMTNLT02nXrh1PPPEEAL/+9a/Ztm0bHTp0oFOnTsybNw+Ayy67jPT0dH784x+XSrw9evRg2LBh9OrVi5tvvpnjjz+ewYMH86Mf/YjevXvTsWNHxowZQ1ZWFl26dGHixIn06NGDnj17cskll0RPf7Vt25YZM2aQnp7O1q1bueKKKw5ZTqNGjZg+fTrjxo0jPT2dXr168fnnn4feTqeddhqtWrWiY8eOXH/99Ye1D04//XTGjx9PRkYG5557Lt26dUu4DUWKw8KeFqkounXr5vn79a9YsYK2bduWU0RSXqZMmUKdOnUOuZZxOFatWsXw4cP59NNPSykyKSn9ny59ZrbE3bvF+05HJCIiUiK62C6V1pQpU0plPi1bttTRiFRqSiQiIslUBtV3y5tObYmIJFMZVN8tb0okIiJSIkokIiJSIkokFVSdOnUAWLduHWPGjCl03AcffDBukUGASy655JASJvFs2rSJnj170rlz52iRwbCWLVvG66+/XqxpoPzKs69atYoOHTqU+XLjOVJK1IsUmkjMrIqZ9SmrYKRweVVZi+P444+PVt5NpLBE8vTTT9OuXbtCp3/rrbdo06YNS5cujd7pHdbhJhIpmdjSKSIlVWgicfeDwO/KKJZKq7Ay5C1btuQ3v/kNp59+Oi+++CJff/01Q4cOpWvXrvTt2zd6d/TKlSvp3bs33bt35+abbz5k3nm/oHNzc7n++uujpdkffvhhpk6dyrp16xgwYAADBgwoEFvsr946derwq1/9ik6dOtGrVy82bNjAsmXLuOGGG3j99dfJyMhg7969CculL168mD59+tCpUyd69OjBjh07uOWWW5g1axYZGRnMmjWL3bt385Of/ITu3bvTuXNnXnvtNSBSTPD8888nPT2d8847j71798bdli1btoyWYe/Ro0e0JEmicvVbt25l1KhR0bvNP/74Y6DwEvN5cnNzmTRpUrTc/JNPPhl337Zt25ZLL72U9u3bM3jw4Gjssdt28+bNtGzZEoiUjB81ahTnnHMOrVq14pFHHuH++++nc+fO9OrVK1pCByIl4Pv06UOHDh2iZVMSbcPp06czduxYzjnnHAYPHhx3+0kS1G5cvPZUlKgscN4LuA04l+Au+FR/FVlG/tpr3fv1K91XTDn0eAorQ96iRQu/++67o+OeeeaZ/sUXX7i7+/vvv+8DBgxwd/dzzjknWv77kUceiZZbX7lypbdv397d3R977DEfPXq0HzhwwN2/K1ffokWLaAn7/PLKoLtHyorPmTPH3d0nTZrk//u//+vuh5Y4T1Qufd++fd6qVStftGiRu7vv2LHDDxw4UKA8+k033eQzZ850d/dt27Z569atfdeuXf673/3OL7roInd3/+ijjzwtLS0aV6wWLVr47bff7u7uM2bM8GHDhrl74nL1V111lU+ZMsXd3d96661o2fVEJeZjt+eTTz4Z3QbZ2dnetWtX/89//nNIPCtXrvS0tDRfunSpu7uPHTs2un6x23bTpk3eokWL6PY86aSTfOfOnb5x40avV6+eP/744+7u/vOf/9wfeOCB6PSXXHKJu7u//fbb0bgSbcNp06Z506ZNo/u9IlMZ+dJHCcvIXwfUBnLNbC9gkfzj9ZKT2iqnwsqQn3feeUCknPm//vUvxo4dG51u3759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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "import pandas as pd\n",
    " \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.optimize import curve_fit\n",
    " \n",
    "def logistic_increase_function(t,K,P0,r):\n",
    "    t0=11\n",
    "    #r 0.05/0.55/0.65\n",
    "    r = 0.45\n",
    "    # t:time   t0:initial time    P0:initial_value    K:capacity  r:increase_rate\n",
    "    exp_value=np.exp(r*(t-t0))\n",
    "    return (K*exp_value*P0)/(K+(exp_value-1)*P0)\n",
    " \n",
    "'''\n",
    "1.11日41例\n",
    "1.18日45例\n",
    "1.19日62例\n",
    "1.20日291例\n",
    "1.21日440例\n",
    "1.22日571例\n",
    "1.23日835例\n",
    "1.24日1297例\n",
    "1.25日1985例\n",
    "1.26日2762例\n",
    "1.27日4535例\n",
    "'''\n",
    " \n",
    "#  日期及感染人数\n",
    "t=[11,18,19,20 ,21, 22, 23, 24,  25,  26,  27]\n",
    "t=np.array(t)\n",
    "P=[41,45,62,291,440,571,835,1297,1985,2762,4535]\n",
    "P=np.array(P)\n",
    " \n",
    "# 用最小二乘法估计拟合\n",
    "# 现有数据曲线拟合检验\n",
    "popt1, pcov1 = curve_fit(logistic_increase_function, t, P)\n",
    "\n",
    "#获取popt里面是拟合系数\n",
    "print(\"K:capacity  P0:initial_value   r:increase_rate   t:time\")\n",
    "print(popt1)\n",
    "#拟合后预测的P值\n",
    "\n",
    "P_predict = logistic_increase_function(t,popt1[0],popt1[1],popt1[2])\n",
    "#未来预测\n",
    "future=[11,18,19,20 ,21, 22, 23, 24,  25,  26,  27,28,29,30,31,41,51,61,71,81,91,101]\n",
    "future=np.array(future)\n",
    "future_predict=logistic_increase_function(future,popt1[0],popt1[1],popt1[2])\n",
    "\n",
    "#近期情况预测\n",
    "tomorrow=[28,29,30,32,33,35,37,40]\n",
    "tomorrow=np.array(tomorrow)\n",
    "tomorrow_predict=logistic_increase_function(tomorrow,popt1[0],popt1[1],popt1[2])\n",
    "#绘图\n",
    "plot1 = plt.plot(t, P, 's',label=\"confimed infected people number\")\n",
    "plot2 = plt.plot(t, P_predict, 'r',label='predict infected people number')\n",
    "plot3 = plt.plot(tomorrow, tomorrow_predict, 's',label='tomorrow predict infected people number')\n",
    "plt.xlabel('time')\n",
    "\n",
    "plt.ylabel('confimed infected people number')\n",
    " \n",
    "plt.legend(loc=0) #指定legend的位置右下角\n",
    " \n",
    "print(logistic_increase_function(np.array(28),popt1[0],popt1[1],popt1[2]))\n",
    "print(logistic_increase_function(np.array(29),popt1[0],popt1[1],popt1[2]))\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本次拟合采用了1月11日到1月27日的累计确诊病例数据作为原始数据，采用最小二乘法拟合逻辑斯蒂曲线，最后经过对逻辑斯蒂模型中R值（增长速率，到达K值的速度）的拟合调整，发现在0.45附近得到的曲线比较贴合我国1月至2月疫情实际情况。2月9日的预测值在4万左右，与实际情况十分贴近，也证明了模型的一定可靠性。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将本模型推广，进行全球范围内典型新冠肺炎爆发国家的疫情拟合与未来疫情预测，同时将通过R值的大小反应出该国疫情应对的有效程度。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K:capacity  P0:initial_value   r:increase_rate   t:time\n",
      "[1.90111382e+04 8.41012323e+00 1.00000000e+00]\n",
      "32.72553736406284\n",
      "35.446069530148975\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\王滨2000\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\scipy\\optimize\\minpack.py:807: OptimizeWarning: Covariance of the parameters could not be estimated\n",
      "  warnings.warn('Covariance of the parameters could not be estimated',\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "import pandas as pd\n",
    " \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.optimize import curve_fit\n",
    " \n",
    "def logistic_increase_function(t,K,P0,r):\n",
    "    t0=11\n",
    "    #r \n",
    "    r = 0.08\n",
    "    # t:time   t0:initial time    P0:initial_value    K:capacity  r:increase_rate\n",
    "    exp_value=np.exp(r*(t-t0))\n",
    "    return (K*exp_value*P0)/(K+(exp_value-1)*P0)\n",
    "  \n",
    "#  日期及感染人数\n",
    "\n",
    "n = \"../dataSets\\\\countrydata.csv\"\n",
    "data = pd.read_csv(n)\n",
    "# 修改国家可以得到不同的曲线拟合情况\n",
    "data = data[data['countryName'] == '日本']\n",
    "date_list = list(data['dateId'])\n",
    "date_list = list(map(lambda x:str(x),date_list))\n",
    "\n",
    "confirm_list = list(data['confirmedCount'])\n",
    "\n",
    "time_array = np.array(range(19,len(date_list)+19))\n",
    "long_time_array = np.array(range(19,len(date_list)+190))\n",
    "confirm_array = np.array(confirm_list)\n",
    " \n",
    "# 用最小二乘法估计拟合\n",
    "\n",
    "# 现有数据曲线拟合预测\n",
    "popt, pcov = curve_fit(logistic_increase_function, time_array, confirm_array)\n",
    "#获取popt里面是拟合系数\n",
    "print(\"K:capacity  P0:initial_value   r:increase_rate   t:time\")\n",
    "print(popt)\n",
    "#拟合后预测的P值\n",
    "P_predict = logistic_increase_function(long_time_array,popt[0],popt[1],popt[2])\n",
    "\n",
    "#未来预测\n",
    "\n",
    "#近期情况预测\n",
    "\n",
    "#绘图\n",
    "plot1 = plt.plot(time_array, confirm_array, 's',label=\"confimed infected people number\")\n",
    "plot2 = plt.plot(long_time_array, P_predict, 'r',label='predict infected people number')\n",
    "plt.xlabel('time')\n",
    "plt.ylabel('confimed infected people number')\n",
    " \n",
    "plt.legend(loc=0) #指定legend的位置右下角\n",
    " \n",
    "print(logistic_increase_function(np.array(28),popt[0],popt[1],popt[2]))\n",
    "print(logistic_increase_function(np.array(29),popt[0],popt[1],popt[2]))\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K:capacity  P0:initial_value   r:increase_rate   t:time\n",
      "[2.81881286e+06 7.54187927e+03 1.00000000e+00]\n",
      "17582.313915881037\n",
      "18477.86915113596\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\王滨2000\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\scipy\\optimize\\minpack.py:807: OptimizeWarning: Covariance of the parameters could not be estimated\n",
      "  warnings.warn('Covariance of the parameters could not be estimated',\n"
     ]
    },
    {
     "data": {
      "image/png": "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xIgRvPjii4Dzl/egQYO44IILOPPMM1m+fDk9evSgWbNmPPbYYzlxfPDBB8THx9OiRQvuuusujhxxJg2ZMGECp512GhdeeCGLFi0q8Bx8/6r2GuOOHTu49tpradOmDW3atMk59oEDB7j11ls555xziI2NZcaMGQwdOpT09HRatGjBTTfddMzxjhgxgr59+9K5c2eaNWvGuHHjct574YUXaNOmDbGxsQwfPjynfMyYMTRv3pzmzZvzyiuvAJCSksIZZ5xBv379iI2NpWfPnhw8eDDf582ZM4f27dvTqlUrrrvuOg4cOJCvTseOHRkyZAjx8fGcdtppfPfdd/m+W4ArrriCBQsWABAVFcWQIUNo3bo1F198McuWLaNjx46cfPLJzJ49O2efzZs3061bN04//XSefPLJnPLCvsOoqCieeOIJ2rZty5IlSwr8Dr3yknh2ikgfEansbn1wVvU0pvjeew86doTatbmm74v80OhMv9XLcmsnUH766SeeeeYZ5s2bx48//sirr74KwMCBA7n55ptJTk7mpptu4r777svZZ9u2bSxcuJDPP/+coUOHAk5XV2RkJCtXrqRXr175Pqdq1ap8++233H333XTv3p033niD1atXM3HiRHbt2sWaNWuYNm0aixYtYuXKlVSuXJkpU6awbds2hg8fzqJFi0hISODnn3/2dF5eYrz//vsZNGgQy5cvZ8aMGdxxxx0APP3009SuXZtVq1aRnJxM586dGTVqVM6+U6ZMKZV4k5OT+eKLL1iyZAlPPfUUW7duZc6cOaxfv55ly5axcuVKkpKS+Pbbb0lKSmLChAksXbqU77//nnHjxrFixQoA1q5dS//+/UlOTqZWrVq8+eabuT5n586djBw5krlz5/LDDz8QFxfHmDEFL3GWlZXFsmXLeOWVV3IliMKkpaXRsWNHkpKSiI6O5rHHHiMhIYHPPvuMJ554IqfesmXLmDJlCitXruSTTz4hMTGx0O8w+7jNmzdn6dKlnH/++UXG4Y+XrrbbgNeBl3FGsy12y4zxLiMDBg50Es/FF8PUqax4canfXSpqa2fevHn07NmT+vXrA3DccccBsGTJEj791BlM2rdvXx5++OGcfa6++moqVarEWWedxZ9//unpc7K7wc455xzOPvtsGjZsCMDJJ5/M5s2bWbhwIUlJSbRp0waA9PR0jj/+eJYuXUrH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+fPn54qtY8eOvPjii8TFxREVFcX999/P559/TmRkJLNmzWLbtm08/PDDOcsVLFmyhO+++47hw4eTmZnJKaecwoQJE4iKimL58uXcf//9pKWlUa1aNRISEnjiiSdIT09n4cKFDBs2jCuuuIJ7772XVatWkZWVxYgRI+jevTvp6enceuut/Pzzz5x55pmkp6cX+F3GxMTQq1evnPP48MMPOfXUU9mxYwd33313ztISr7zyCh06dGD37t3cdttt/Prrr9SoUYN33nmH2NhYRowYwS+//MLvv//O5s2befjhh7nzzjtzfdaRI0cYOnQoCxYsIDMzkwEDBuSb3y0lJYVLL72U888/n8WLF9OoUSNmzZpFZGRkru92586dxMXFkZKSwsSJE5k5cyZHjhxh9erVPPjggxw6dIj333+fatWq8eWXX+ZMJPvBBx9w3333sX//fsaPH098fDxpaWkFfocTJ07kiy++ICMjg7S0NObNK3r+xNJiiac8OnQIfvsN1q+HVavgxx8hOdmZrDN7YsG//Q06dIABA5zHuDg4hgkAi5twspXppBNCa9eu5b333qNDhw7cdtttvPnmmzl31FevXp2FCxcCzvxkb7/9Ns2aNWPp0qX885//ZN68edx///3cc8893HzzzbzxxhsFfsY777zDb7/9xooVK6hSpQq7d+/muOOOY8yYMcyfPz9nduzCpKWl0a5dO5555hkefvhhxo0bx2OPPcZTTz1FYmIir7/+eq7p/2vWrMno0aMZM2YMQ4cOpVevXkybNo02bdqwf/9+atSokWtfgEceeYTOnTszfvx49u7dS3x8PBdffDH//ve/qVGjBsnJySQnJ/udMqZWrVosW7aMyZMn88ADD/D555/nLL9w/vnns2nTJrp27cqaNWsYPnw4LVu2ZObMmcybN4+bb745Z7645ORkvv/+e9LS0mjZsiWXX557do333nuP2rVrs3z5cjIzM+nQoQNdunShadOmueqtX7+eqVOnMm7cOK6//npmzJhBnz59/H7Xq1evZsWKFWRkZHDqqacyevRoVqxYwaBBg3LOK/s3Wbx4Md9++y233XYbq1ev5plnninwOwRnxvPk5OScxBUslnjCUWYmbN0Kv//ubJs3O7MFbNjgbJs2/ZVgAGJiIDYWevaEc891utFiYnJNY1MSJU022cLiuo6flkkg+ZtWP3tt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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "import pandas as pd\n",
    " \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.optimize import curve_fit\n",
    " \n",
    "def logistic_increase_function(t,K,P0,r):\n",
    "    t0=11\n",
    "    #r 中国0.25 美国0.05 英国0.08 意大利0.08 德国0.09 韩国0.11\n",
    "    r = 0.05\n",
    "    # t:time   t0:initial time    P0:initial_value    K:capacity  r:increase_rate\n",
    "    exp_value=np.exp(r*(t-t0))\n",
    "    return (K*exp_value*P0)/(K+(exp_value-1)*P0)\n",
    " \n",
    "#  日期及感染人数\n",
    "\n",
    "n = \"../dataSets\\\\countrydata.csv\"\n",
    "data = pd.read_csv(n)\n",
    "# 修改国家可以得到不同的曲线拟合情况\n",
    "data = data[data['countryName'] == '美国']\n",
    "date_list = list(data['dateId'])\n",
    "date_list = list(map(lambda x:str(x),date_list))\n",
    "\n",
    "confirm_list = list(data['confirmedCount'])\n",
    "\n",
    "time_array = np.array(range(19,len(date_list)+19))\n",
    "long_time_array = np.array(range(19,len(date_list)+190))\n",
    "confirm_array = np.array(confirm_list)\n",
    " \n",
    "# 用最小二乘法估计拟合\n",
    "\n",
    "# 现有数据曲线拟合预测\n",
    "popt, pcov = curve_fit(logistic_increase_function, time_array, confirm_array)\n",
    "#获取popt里面是拟合系数\n",
    "print(\"K:capacity  P0:initial_value   r:increase_rate   t:time\")\n",
    "print(popt)\n",
    "#拟合后预测的P值\n",
    "P_predict = logistic_increase_function(long_time_array,popt[0],popt[1],popt[2])\n",
    "\n",
    "#未来预测\n",
    "\n",
    "#近期情况预测\n",
    "\n",
    "#绘图\n",
    "plot1 = plt.plot(time_array, confirm_array, 's',label=\"confimed infected people number\")\n",
    "plot2 = plt.plot(long_time_array, P_predict, 'r',label='predict infected people number')\n",
    "plt.xlabel('time')\n",
    "plt.ylabel('confimed infected people number')\n",
    " \n",
    "plt.legend(loc=0) #指定legend的位置右下角\n",
    " \n",
    "print(logistic_increase_function(np.array(28),popt[0],popt[1],popt[2]))\n",
    "print(logistic_increase_function(np.array(29),popt[0],popt[1],popt[2]))\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K:capacity  P0:initial_value   r:increase_rate   t:time\n",
      "[1.80914161e+05 1.64581650e+02 1.00000000e+00]\n",
      "757.5735794509163\n",
      "828.5907718193063\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\王滨2000\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\scipy\\optimize\\minpack.py:807: OptimizeWarning: Covariance of the parameters could not be estimated\n",
      "  warnings.warn('Covariance of the parameters could not be estimated',\n"
     ]
    },
    {
     "data": {
      "image/png": "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zcO5/8UYE3zFJhgRaQlMxEkMCiwE7lbV9CJ3LISqLiRwH8mnRewzAZgQoDwR6BSg/CBwZUniq7JUYdQoaNAAJhzzUVd5ceMTAjYXVpRLRd9///18+umnXHTRRbRr1446depw3XXXlekxpk6dSmJiIi+88EK+8jlz5rB69WpGjx7tOcYnn3zyuI79j3/8g7/97W9lEm956Nu3L0899RRxcXHlfmx/ofwMwFsn/2vAGxz9wb7WLQv9/ypTdmbOhAUL4L//hcaFz9qvqgrri6oofVT//e9/ycjIoFatWuV+7Msuu4zLLrus2O1KE2NJEowpvZycHCIiSn6BQS99ME1V9TVVzXZvUwHrEa9MNm+Gu+6C+Hi4+WZPu1SG/peKYPr06cTExNC5c2dGjBgBwMaNGznvvPOIiYnhvPPOY9OmTQDccMMN3HXXXfTq1YtTTjmFd999F3B+4LOysoiPj2fWrFmMGzeOp556CnD+kr733nvp06cPHTp0YNmyZQwZMoT27dvz8MMP58Xx+uuv0717d2JjY7ntttvIyXFaoV977TVOO+00zj33XBYtWhTwHKZOncqdd955XDFmZGTwxz/+kW7dutGtW7e89963bx833ngjZ511FjExMbz33nuMHj2aAwcOEBsby5/+9KdSxztu3DhGjBhB//79ad++PZMnT8577cknn6Rbt27ExMQwduzYvPKnn36aTp060alTJ5599lkAUlNTOeOMM7j++uuJiYlh6NCh7N+//5jjzZ07l549e9K1a1euvPJK9u3bd8w2ffv25cEHH6R79+6cdtppLFiw4JjPFuCSSy5h/vz5AERFRfHggw9y9tlnc/7557N06VL69u3LKaecwpw5c/L2SUtLY9CgQZx++un8/e9/zysv7DOMiori0UcfJT4+nsWLFwf8DL3ykmC2i8i1IhLh3q4FMkt1VFNxqDpJ5eBBmDYN3L9WiuvgrwjNQuHuxx9/ZMKECXz11VesXLmS5557DoA777yT6667juTkZP70pz9x11135e2zZcsWFi5cyMcff5zXJDVnzhwiIyNZsWIFw4YNO+Y4NWvW5Ntvv+X2229n8ODBvPjii6SkpDB16lQyMzNZs2YNs2bNYtGiRaxYsYKIiAhmzpzJli1bGDt2LIsWLSIhIYHVq1d7Oi8vMd59993ce++9LFu2jPfee49bbrkFgMcff5wGDRqwatUqkpOT6d+/P0888UTevjNnziyTeJOTk/nkk09YvHgxjz32GJs3b2bu3LmsW7eOpUuXsmLFCpKSkvj2229JSkritddeY8mSJXz//fdMnjyZ5cuXA/Dzzz8zcuRIkpOTqV+/Pi+99FK+42zfvp3x48czb948fvjhB+Li4nj66cCX0srOzmbp0qU8++yz+RJBYbKysujbty9JSUnUq1ePhx9+mISEBD744AMeffTRvO2WLl3KzJkzWbFiBe+88w6JiYmFfoa+9+3UqRNLlizhnHPOKTaOonhpIrsJeAFnyRUFvnPLTGXw3//C5587y8KcfnpecVFNP1Z7KRtfffUVQ4cOpUmTJgA0atQIgMWLF/P+++8DMGLECB7wW03h8ssvp1q1anTs2JGtW7d6Oo6v+eqss87izDPPpFkzZ8DmKaecQlpaGgsXLiQpKYlu3boBcODAAU488USWLFlC37598Q3hHzZsGGvXri32eF5inDdvXr4EsGfPHvbu3cu8efN466238spPOOGEY/b98ssvSx3v4MGDiYyMJDIykn79+rF06VIWLlzI3Llz6dLFuUr8vn37WLduHfv27eOKK66gbt26AAwZMoQFCxZw2WWX0apVK3r37g3Atddey/PPP899992Xd5zvv/+e1atX521z+PBhevbsGTCmIUOc2R9nn302qampAbfxV7NmTQYNclbHOuuss6hVqxY1atTgrLPOyrf/BRdcQGO32XvIkCEsXLiQ6tWrB/wMASIiIvjjH/9Y7PG98DKKbBNQfAOrCT/LlsE998CAAfB//+d5N6u9lA1V9TT0038b//4LryPvfftUq1Yt3/7VqlUjOzsbVeX666/nn//8Z779PvzwwxINTfUSY25uLosXLyYyMjJfuZfPpCziLbidiKCqjBkzhttuuy3fa74mMa/vUzDWCy64gDfffLPYmHyfW0REBNnZ2QBUr16d3NzcvG3856HUqFEj73j+363vey0qxsI+Q3Bm7Jem38Wfl7XIpolIQ7/nJ4jIlDI5ugmdrVthyBA4+WSng7+al9bSqquwWltpanPnnXceb7/9NpmZTovzjh3OXOBevXrl/RU/c+bMUjdTeInj3XffZdu2bXlxbNy4kfj4eObPn09mZiZHjhzhnXfK7rqDAwYMyDeyacWKFQHLd+7cCTg/pkeOHCmzeGfPns3B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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "import pandas as pd\n",
    " \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.optimize import curve_fit\n",
    " \n",
    "def logistic_increase_function(t,K,P0,r):\n",
    "    t0=11\n",
    "    #r \n",
    "    r = 0.09\n",
    "    # t:time   t0:initial time    P0:initial_value    K:capacity  r:increase_rate\n",
    "    exp_value=np.exp(r*(t-t0))\n",
    "    return (K*exp_value*P0)/(K+(exp_value-1)*P0)\n",
    " \n",
    "#  日期及感染人数\n",
    "\n",
    "n = \"../dataSets\\\\countrydata.csv\"\n",
    "data = pd.read_csv(n)\n",
    "# 修改国家可以得到不同的曲线拟合情况\n",
    "data = data[data['countryName'] == '德国']\n",
    "date_list = list(data['dateId'])\n",
    "date_list = list(map(lambda x:str(x),date_list))\n",
    "\n",
    "confirm_list = list(data['confirmedCount'])\n",
    "\n",
    "time_array = np.array(range(19,len(date_list)+19))\n",
    "long_time_array = np.array(range(19,len(date_list)+190))\n",
    "confirm_array = np.array(confirm_list)\n",
    " \n",
    "# 用最小二乘法估计拟合\n",
    "\n",
    "# 现有数据曲线拟合预测\n",
    "popt, pcov = curve_fit(logistic_increase_function, time_array, confirm_array)\n",
    "#获取popt里面是拟合系数\n",
    "print(\"K:capacity  P0:initial_value   r:increase_rate   t:time\")\n",
    "print(popt)\n",
    "#拟合后预测的P值\n",
    "P_predict = logistic_increase_function(long_time_array,popt[0],popt[1],popt[2])\n",
    "\n",
    "#未来预测\n",
    "\n",
    "#近期情况预测\n",
    "\n",
    "#绘图\n",
    "plot1 = plt.plot(time_array, confirm_array, 's',label=\"confimed infected people number\")\n",
    "plot2 = plt.plot(long_time_array, P_predict, 'r',label='predict infected people number')\n",
    "plt.xlabel('time')\n",
    "plt.ylabel('confimed infected people number')\n",
    " \n",
    "plt.legend(loc=0) #指定legend的位置右下角\n",
    " \n",
    "print(logistic_increase_function(np.array(28),popt[0],popt[1],popt[2]))\n",
    "print(logistic_increase_function(np.array(29),popt[0],popt[1],popt[2]))\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K:capacity  P0:initial_value   r:increase_rate   t:time\n",
      "[1.08319531e+04 2.83043300e+01 1.00000000e+00]\n",
      "181.0504132165738\n",
      "201.71057598303963\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\王滨2000\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\scipy\\optimize\\minpack.py:807: OptimizeWarning: Covariance of the parameters could not be estimated\n",
      "  warnings.warn('Covariance of the parameters could not be estimated',\n"
     ]
    },
    {
     "data": {
      "image/png": "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999/P507d+b8888nLS2NPn360KJFC+bMmZO/z7Zt2xg0aBDnnHMOf/7zn/PLA32GCQkJPPLII3Tr1o2lS5f6/Qy98pJI9ojItSIS596uBbJDOqoJbvVq+M9/YPRoaNjwlJeD/XVsgxFLn7Vr1zJx4kQ+++wzVq1axTPPPAPA7bffznXXXUdmZia///3vueOOO/L32bFjB4sXL+aDDz5g7NixgFO1VLVqVVauXMnQoUNPOU6lSpVYtGgRt956K4MHD+a5555jzZo1TJs2jezsbNatW8fMmTNZsmQJK1euJC4ujhkzZrBjxw7GjRvHkiVLmDdvHl9//bWn8/IS45133sndd9/N8uXLmTVrFiNHjgTgscceo1atWqxevZrMzEz69evHpEmT8vedMWNGWOLNzMzkww8/ZOnSpTz66KNs376duXPnsmHDBtLS0li5ciUZGRksWrSIjIwMpk6dyrJly/jyyy95+eWXWbFiBQDffvsto0aNIjMzk5o1a/L8888XOM6ePXuYMGEC8+fP56uvviI1NZWnAiw+l5OTQ1paGk8//XSBH/xADh06RJ8+fcjIyKBGjRo89NBDzJs3j/fee49HHnkkf7u0tDRmzJjBypUrefvtt0lPTw/4Gea9b1JSEsuWLePcEIcWeKnauhF4FvgHTm+tL9wyEwmqTgKpUwfuv/+0d7euv6XPZ599xpVXXkn9+vUBqFu3LgBLly7l3Xedzo/Dhw/nPp+rzyFDhlChQgXatm3Lzp07PR0nr9qpffv2tGvXjkaNGgHQokULtm3bxuLFi8nIyKBLly4AHDlyhIYNG7Js2TL69OlDgwZORcPQoUNZv359kcfzEuP8+fML/NDv37+fAwcOMH/+fN5888388jp16pyy76effhpyvIMHD6Zq1apUrVqVvn37kpaWxuLFi5k7dy4dO3YEnKujDRs2cPDgQS677DKqV68OwOWXX87nn3/OpZdeStOmTenVqxcA1157LZMnT+bee+/NP86XX37J119/nb/N8ePH6dGjh9+YLnenOercuTNbtmzxu42vSpUqMWjQIMD5bitXrkx8fDzt27cvsP8FF1xAvXr18o+xePFiKlas6PczBIiLi+OKK64o8vheeOm1tRUoumLUhMfrr8Pnn8PLLzvdfk3MU1VPXSp9t/FtX1D1thZb3j4VKlQosH+FChXIyclBVRkxYgR/+ctfCuz3/vvvF6vLp5cYc3NzWbp0KVUL9Tr08pmEI97C24kIqsoDDzzALbfcUuC1vKosr+9TONYLLriAN954o8iY8j63uLg4cnJyAKhYsSK5ubn52/jOwhAfH59/PN/vNu97DRZjoM8QnBHsobSL+PLSa2u6iNT2eV5HRF4Ny9FNQT//7HT17doVbvR/0WftI5EVifnL+vfvz1tvvUV2tlMjvHfvXgB69uyZ/1f5jBkzQq5e8BLHO++8w65du/Lj+P777+nWrRsLFy4kOzubEydO8Pbb4VvHbsCAATz77LP5z1euXOm3/KeffgKcH80TJ06ELd7Zs2dz9OhRsrOzWbhwIV26dGHgwIG8+uqr+W0YP/zwA7t27aJ37968//77HD58mEOHDvHee+/xm9/8BoCtW7fmtyO88cYbp3xX3bt3Z8mSJWzcuBGAw4cPe7qqy5OYmMjKlSvJzc1l27ZtpKWled43z7x589i7dy9Hjhzh/fffp1evXgE/w3DzUrWVrKo/5z1R1Z9EpGPYIynvVJ25tPbsgQ8/hAr+c3xp6T1UVkWiarBdu3Y8+OCDnHfeecTFxdGxY0emTZvG5MmTufHGG/nb3/5GgwYNmDp1atiP7att27ZMmDCBAQMGkJubS3x8PM899xzdu3dn/Pjx9OjRg0aNGtGpU6f8BtlQTZ48mdGjR5OcnExOTg69e/fmxRdf5KGHHmL06NEkJSURFxfHuHHjuPzyyxk1ahTJycl06tSJGTNmhBxv165dueiii9i6dSsPP/wwjRs3pnHjxqxbty6/6ikhIYHXX3+dTp06cf3119O1a1cARo4cSceOHdmyZQtt2rRh+vTp3HLLLbRs2ZLbbrutwHEaNGjAtGnTuPrqqzl2zJkAZMKECbRq1crT59SrVy+aN29O+/btSUpKolOnTqf9WZ977rkMHz6cjRs3cs0115CampofR+HP8Kyzzjrt9w9GirpsFpFVQB9V/cl9Xhf4n6q2D2skJSQ1NVVLQ7/vU0yd6lyFTJgADz4YcLPEsR8GfM2mR/Fv3bp1tGnTJtphmBI2fvx4EhISCrRlFMeWLVu4+OKLWbNmTZgiK/38/Z8RkQxVTfW3vZcrkr8DX4jIOziN7b/DzyJTJgTr1sEf/wh9+oDb+8Wfoqq1LIkYY6LBS2P7ayKSDvTDWdnwclX11j/QFG3nTrjoIqhe3VlKN0jjl1VrGePd+PHjw/I+iYmJ5epqpDi8XJHgJg5LHuF26BBcfDH8+KMzy28Tm3nGGBN7PCUSEwH798Mll8BXXzkTM7r9vIvLBiIaY6LFEkk07NkDgwbBqlXO6oeXXBLyW1r7iDEmWrxMkWLCaflySE2FtWudK5FhwzztZuNHjDGllSWSknLyJPzjH85yuapOm8hFF3ne3ebXMr4SEhIA2L59O1deeWXQbZ9++mm/kwyCM1aiqLm1du/eTbdu3ejYsWP+JINerVy5ko8++ui09oHoTc++ZcsWkpKSSvy4/pSWKeq9sERSEpYvh27d4J57YMAAp13EHfTkhXX7LR+KMwiwcePG+TPvBhIskfzrX/+ibdu2Qff/9NNPad26NStWrMgf6e1VcROJCY3v1CklwRJJJK1YAZdd5iSNrCx4802YM+e059Cybr9hdNddznidcN6KWHgs2DTkiYmJPProo5x77rm8/fbbbNq0iUGDBtG5c2d+85vf8M033wCwefNmevToQZcuXXj44YcLvHfeX9AnT57k3nvvzZ+afcqUKUyePJnt27fTt29f+vbte0psvn/1JiQk8OCDD9KhQwe6d+/Ozp07WblyJffddx8fffQRKSkpHDlyJOB06cuXL6dnz5506NCBrl27sm/fPh555BFmzpxJSkoKM2fO5NChQ9x444106dKFjh07Mnv2bMCZTHDYsGEkJyczdOhQjhw54vezTExMzJ+GvWvXrvlTkgSarn7v3r0MGTKE5ORkunfvTmZmJhB8ivk8J0+eZMyYMfnTzf/zn//0+922adOGm2++mXbt2jFgwID82H0/2z179pCYmAg4U8YPGTKESy65hObNm/Pss8/y1FNP0bFjR7p3754/hQ44U8D37NmTpKSk/GlTAn2G06ZN46qrruKSSy5hwADfldEjzxJJuP30E0ybBj17QqdOsGABPPqos1DV0KFwmpPjWdtI2RBsGvIqVaqwePFihg0bxqhRo5gyZQoZGRk8+eST/OEPfwDgzjvv5LbbbmP58uX8KsBCZy+99BKbN29mxYoVBaamb9y4MQsWLGDBggVBYzx06BDdu3dn1apV9O7dm5dffpmUlBQeffRRhg4dysqVKzl06JDf6dKPHz/O0KFDeeaZZ1i1ahXz58+nevXqBfYdOnQoEydOpF+/fixfvpwFCxYwZswY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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "import pandas as pd\n",
    " \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.optimize import curve_fit\n",
    " \n",
    "def logistic_increase_function(t,K,P0,r):\n",
    "    t0=11\n",
    "    #r 中国0.25 美国0.05 英国0.08 意大利0.08 德国0.09 韩国0.11\n",
    "    r = 0.11\n",
    "    # t:time   t0:initial time    P0:initial_value    K:capacity  r:increase_rate\n",
    "    exp_value=np.exp(r*(t-t0))\n",
    "    return (K*exp_value*P0)/(K+(exp_value-1)*P0)\n",
    " \n",
    "#  日期及感染人数\n",
    "\n",
    "n = \"../dataSets\\\\countrydata.csv\"\n",
    "data = pd.read_csv(n)\n",
    "# 修改国家可以得到不同的曲线拟合情况\n",
    "data = data[data['countryName'] == '韩国']\n",
    "date_list = list(data['dateId'])\n",
    "date_list = list(map(lambda x:str(x),date_list))\n",
    "\n",
    "confirm_list = list(data['confirmedCount'])\n",
    "\n",
    "time_array = np.array(range(19,len(date_list)+19))\n",
    "long_time_array = np.array(range(19,len(date_list)+190))\n",
    "confirm_array = np.array(confirm_list)\n",
    " \n",
    "# 用最小二乘法估计拟合\n",
    "\n",
    "# 现有数据曲线拟合预测\n",
    "popt, pcov = curve_fit(logistic_increase_function, time_array, confirm_array)\n",
    "#获取popt里面是拟合系数\n",
    "print(\"K:capacity  P0:initial_value   r:increase_rate   t:time\")\n",
    "print(popt)\n",
    "#拟合后预测的P值\n",
    "P_predict = logistic_increase_function(long_time_array,popt[0],popt[1],popt[2])\n",
    "\n",
    "#未来预测\n",
    "\n",
    "#近期情况预测\n",
    "\n",
    "#绘图\n",
    "plot1 = plt.plot(time_array, confirm_array, 's',label=\"confimed infected people number\")\n",
    "plot2 = plt.plot(long_time_array, P_predict, 'r',label='predict infected people number')\n",
    "plt.xlabel('time')\n",
    "plt.ylabel('confimed infected people number')\n",
    " \n",
    "plt.legend(loc=0) #指定legend的位置右下角\n",
    " \n",
    "print(logistic_increase_function(np.array(28),popt[0],popt[1],popt[2]))\n",
    "print(logistic_increase_function(np.array(29),popt[0],popt[1],popt[2]))\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "关于R值的补充说明：逻辑斯蒂模型中R值代表的增长速率不是传统意义上理解的种群增长速度，而是接近种群数量达到环境承载力K值的速度。强烈的人为干预可以**大幅度降低K值**，使得种群数量快速达到最大值附近，疫情扩散得以控制。所以本模型在预测各国最终累计感染人数的功能之外，拟合过程中R值的大小可以反映某个国家面对新冠肺炎采取措施的**有效性和效率**。一般来说，R值越大，该国防疫措施越有效。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "国家 | 中国 |美国 |英国 |德国 |意大利 |韩国| 日本\n",
    "- | :-: | :-: | :-: | :-: | :-: | :-: | -:\n",
    "R |0.25 | 0.05 |0.08 |0.09 |0.08 |0.11 |0.08"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二、SEITR模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "（1）模型简介：SEITR模型是基于动力学SEIR模型不断调试模拟的结果，能够比较合理贴合传染病传播的一般规律。\n",
    "\n",
    "1）模型中的4类人群：N为总人数\n",
    "SUSCEPTIBLES: 用S表示，为易感者, 潜在的可感染人群\n",
    "EXPOSED：用E表示，为潜伏者, 已经被感染但是没有表现出来的人群\n",
    "INFECTIVES: 用I表示，为感染者, 表现出感染症状的人\n",
    "RESISTANCES: 用R表示，为抵抗者, 感染者痊愈后获得抗性的人\n",
    "\n",
    "2）模型中的3种参数：\n",
    "αß：易感人群（S) 被感染人员（I) 传染的传染率，相当于单人次易感者接触感染者而被感染的几率（ß）与易感者单位时间内接触的感染者人数（α）的乘积\n",
    "γ：感染人群（I) 以固定平均速率恢复（R) 或死亡的恢复率\n",
    "Ω：潜伏人群（E) 变为感染者的平均速率，通常数值取潜伏期的倒数\n",
    "\n",
    "3）增加修正的参数：\n",
    "“T”：已被感染且正处于接受治疗时期的人群，主要特征表现为已被感染，已过潜伏期，但不会进行传染，且正在被治疗。\n",
    "同时也将I人群严格定义为被感染，已过潜伏期但未被医院收治无法接受治疗的人群。\n",
    "δ，表示I变为T的速率，主要受医院接诊速率及收治能力影响，也受发病后及时就医的时间影响。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以下使用SEITR模型对美国疫情基本得到控制的时间进行预测。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scipy.integrate as spi\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# N为人群总数（美国人口大致为3.3亿）\n",
    "N =330000000\n",
    "# β为传染率系数（美国实际应该略高）\n",
    "beta = 0.19\n",
    "# gamma为恢复率系数\n",
    "gamma = 0.15\n",
    "#δ为受到治疗系数（收治率）\n",
    "δ = 0.3\n",
    "# Te为疾病潜伏期\n",
    "Te = 14\n",
    "# I_0为感染未住院的初始人数\n",
    "I_0 = 1\n",
    "# E_0为潜伏者的初始人数\n",
    "E_0 = 0\n",
    "# R_0为治愈者的初始人数\n",
    "R_0 = 0\n",
    "#T_0为治疗中的初始人数\n",
    "T_0 = 0\n",
    "# S_0为易感者的初始人数\n",
    "S_0 = N - I_0 - E_0 - R_0 - T_0\n",
    "# T为传播时间\n",
    "T = 250\n",
    "\n",
    "# INI为初始状态下的数组\n",
    "INI = (S_0,E_0,I_0,R_0,T_0)\n",
    "\n",
    "def funcSEIR(inivalue,_):\n",
    " Y = np.zeros(5)\n",
    " X = inivalue\n",
    " # 易感个体变化\n",
    " Y[0] = - (beta * X[0] *( X[2]+X[1])) / N\n",
    " # 潜伏个体变化\n",
    " Y[1] = (beta * X[0] *( X[2]+X[1])) / N - X[1] / Te\n",
    " # 感染未住院\n",
    " Y[2] = X[1] / Te - δ * X[2]\n",
    " # 治愈个体变化\n",
    " Y[3] = gamma * X[4]\n",
    " #治疗中个体变化\n",
    " Y[4] = δ* X[2] - gamma* X[4]\n",
    " return Y\n",
    "\n",
    "T_range = np.arange(0,T + 1)\n",
    "\n",
    "RES = spi.odeint(funcSEIR,INI,T_range)\n",
    "\n",
    "plt.plot(RES[:,0],color = 'darkblue',label = 'Susceptible',marker = '.')\n",
    "plt.plot(RES[:,1],color = 'orange',label = 'Exposed',marker = '.')\n",
    "plt.plot(RES[:,2],color = 'red',label = 'Infection',marker = '.')\n",
    "plt.plot(RES[:,3],color = 'green',label = 'Recovery',marker = '.')\n",
    "plt.plot(RES[:,4],color = 'purple',label = 'Under Treatment',marker = '.')\n",
    "\n",
    "plt.title('“SEITR” Model')\n",
    "plt.legend()\n",
    "plt.xlabel('Day')\n",
    "plt.ylabel('Number')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型拟合评价：\n",
    "\n",
    "（1）参数的设置：\n",
    "\n",
    "1）传染率系数与人与人之间的社交距离和社交频率息息相关，美国在疫情早期未及时向民众宣传保持社交距离和戴口罩、减少出行的建议，导致传染率系数会比参数设置的更高；\n",
    "\n",
    "2）治疗系数与当地医疗水平、卫生设施数量、医疗物资等息息相关，疫情中期各州的医疗设备全面告急，医护人员感染率上升，同时中产阶级及以下家庭因为无法支付高昂医疗费选择在家隔离，错过最佳治疗期，使得治疗系数要低于已经有雷神山火神山的武汉对应时期的治疗系数；\n",
    "\n",
    "（2）结果分析：\n",
    "主要的预测在于感染人数逐渐趋于0的时间节点，本次预测得到的结果是今年秋季美国的疫情能够基本得到控制。\n",
    "\n",
    "（3）拟合分析；\n",
    "本模型在尝试同时拟合现有病例（正在接受治疗人群）和治愈人数曲线时，发现无法做到相对同时拟合的比较贴合实际的结果。分析可知，（1）中的参数对拟合结果的影响非常大，而模型参数的选择需要结合美国实际疫情情况才能推算，目前使用的计算手段过于粗糙；同时该模型的假设条件是，美国的0号病人出现在今年1月11日，但是目前的报告陆续显示早在2019年美国就有社区性传播，因此本模型的可靠性大大下降。由于具体的时间目前国际上无法追溯，所以进一步的研究很难继续进行。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
